Many techniques for supporting network processing are known. Such techniques include generic memory management, interrupt scheduling, state machines, computer program code generation, and multi-protocol interfaces. The foundations of such processes are generally understood but in many cases their practical realization has fallen short of the desired results or they are incapable of providing the desired results.
Today many computer programs are intended to be processed in multi-processor and/or multi-threaded environments. The term processing is typically associated with executing a process (such as a computer program or set of computer instructions) and is generally considered to be an operating system concept that may include the computer program being executed and additional information such as specific operating system information. In some computing environments executing a computer program creates a new process to identify, support, and control execution of the computer program. Many operating systems, such as UNIX, are capable of running many processes at the same time using either a single processor and/or multiple processors. Multiple processors can perform tasks in parallel with one another, that is, a processor can execute multiple computer programs interactively, and/or execute multiple copies of the same computer program interactively. The advantages of such an environment includes a more efficient and faster execution of computer programs and the ability of a single computer to perform multiple tasks concurrently or in parallel.
A multiprocessor system, such as for example a network processor system, may include a number of system-on-chip components, that may be optimized for specific processing, such as for example optimized for processing packet input-output and packet modification. According to the one embodiment, a packet may include data, a packet destination address, and a packet sender address. Support for processing a high volume of packets may be provided by a multiprocessor system that requires improvements in common operating system functions. In part due to the high volume of packets, a multiprocessor system is particularly susceptible to inefficient processing techniques that may otherwise be effective with a single processor system.
Communication between computer programs typically includes the use of the buffer. A first computer program may request mutually exclusive access to the buffer and enqueue a communication. Subsequently, a second computer program may request mutually exclusive access to the buffer and dequeue the communication. Ideally, mutual exclusive access to the buffer and/or any buffer attributes are minimized to enhance the overall performance of the buffer. Unfortunately, conventional buffering systems provide mutual exclusive access to the buffer and any associated buffer attributes.
Therefore conventional processing of communication may not be efficient and there remains a need for a system, method, computer program, and computer program product for a shared memory queue in processing communications. What is needed is an ability to buffer communications without requiring unnecessary mutual exclusive access. Further, a need exists for an ability to further reduce the communication overhead associated with communication between two computer programs by eliminating any unnecessary mutual exclusive access, and that overcomes the above and other disadvantages of known communication processing.